package com.atguigu.gmall.order.receiver;

import com.atguigu.gmall.common.config.constant.MqConst;
import com.atguigu.gmall.model.order.OrderInfo;
import com.atguigu.gmall.order.service.OrderService;
import com.rabbitmq.client.Channel;
import lombok.SneakyThrows;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class OrderReceiver {
    //  获取到服务层对象
    @Autowired
    private OrderService orderService;

    //  监听消息：取消订单！
    //  第一种：通过绑定设置 ，第二种：通过队列设置 基于插件的延迟消息队列时，通过配置类！
    @SneakyThrows
    @RabbitListener(queues = MqConst.QUEUE_ORDER_CANCEL)
    public void orderCancel(Long orderId, Message message, Channel channel){
        try {
            //  判断
            if (orderId!=null){
                //  通过 orderId 来获取到orderInfo 对象， 然后根据这个orderInfo 对象判断支付状态！
                OrderInfo orderInfo = orderService.getById(orderId);
                //  判断
                if (orderInfo!=null && "UNPAID".equals(orderInfo.getOrderStatus())
                        && "UNPAID".equals(orderInfo.getProcessStatus())){
                    //  此时关闭过期订单！
                    orderService.execExpiredOrder(orderId);
                }
            }
        } catch (Exception e) {
            //  有异常，需要记录日志...
            e.printStackTrace();
        }

        //  手动确认消息！
        channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
    }
}